export default (() => {
  function getDataType(data) {
    return Object.prototype.toString.call(data).slice(8, -1);
  }
  function isArray(data) {
    return getDataType(data) === 'Array';
  }
  function isObject(data) {
    return getDataType(data) === 'Object';
  }
  function isNumber(data) {
    return getDataType(data) === 'Number' && Number.isFinite(data);
  }
  function isString(data) {
    return getDataType(data) === 'String';
  }
  function isBoolean(data) {
    return getDataType(data) === 'Boolean';
  }
  function isFunction(data) {
    return typeof data === 'function';
  }
  function isDom(el) {
    if (typeof HTMLElement === 'function') {
      return el instanceof HTMLElement;
    }
    return el && el.nodeType === 1;
  }

  return {
    getType: getDataType,
    isArray: isArray,
    isObject: isObject,
    isNumber: isNumber,
    isString: isString,
    isBoolean: isBoolean,
    isFunction: isFunction,
    isDom: isDom,
  };
})();
